package com.ruoyi.system.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 消息推送任务子项实体类
 * 用于管理每个接收者的消息状态，包括阅读状态、签署状态、处理状态等
 * 
 * @author ruoyi
 * @since 2024-01-01
 */
@Data
@TableName("t_msg_push_task_item")
public class MsgPushTaskItemDO {

    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 任务ID
     * 关联消息推送任务表
     */
    @TableField("task_id")
    private Long taskId;

    /**
     * 接收者域
     * SYS-系统用户, H5-H5用户
     */
    @TableField("receiver_domain")
    private String receiverDomain;

    /**
     * 接收者ID
     * 对应接收者域中的用户ID
     */
    @TableField("receiver_id")
    private Long receiverId;

    /**
     * 接收者姓名
     * 冗余字段，便于查询和展示
     */
    @TableField("receiver_name")
    private String receiverName;

    /**
     * 读取状态
     * 0-未读, 1-已读
     * @see com.ruoyi.system.enums.MsgReadStatusEnum
     */
    @TableField("read_status")
    private Integer readStatus;

    /**
     * 阅读时间
     * 用户首次阅读消息的时间
     */
    @TableField("read_time")
    private LocalDateTime readTime;

    /**
     * 确认状态 0带确认 1已确认
     */
    @TableField("status")
    private Integer status;

    /**
     * 签名状态
     * 0-无需签名, 1-未签名, 2-已签名
     * @see com.ruoyi.system.enums.MsgSignStatusEnum
     */
    @TableField("sign_status")
    private Integer signStatus;

    /**
     * 签名时间
     * 用户完成签名的时间
     */
    @TableField("sign_time")
    private LocalDateTime signTime;

    /**
     * 签名文件URL
     * 用户上传的签名文件地址
     */
    @TableField("sign_file_url")
    private String signFileUrl;

    /**
     * 处理状态
     * 0-待推送, 1-已推送, 2-已过期, 3-取消, 4-失败
     * @see com.ruoyi.system.enums.MsgProcessStatusEnum
     */
    @TableField("process_status")
    private Integer processStatus;

    /**
     * 最近推送时间
     * 最后一次推送的时间
     */
    @TableField("last_push_time")
    private LocalDateTime lastPushTime;

    /**
     * 重试次数
     * 推送失败后的重试次数统计
     */
    @TableField("retry_count")
    private Integer retryCount;

    /**
     * 最后错误信息
     * 推送失败时的错误描述
     */
    @TableField("last_error")
    private String lastError;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;

    /**
     * 逻辑删除标识
     * 0-存在, 1-删除
     */
    @TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;
}
